////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modflashdecv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODFLASHDECV1_H
#define MODFLASHDECV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODFLASHDECV1_NAMESPACE_BEGIN namespace modflashdecv1 {
#define MODFLASHDECV1_NAMESPACE_END }

MODFLASHDECV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashLEDType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class modFlashLEDType
{
    SINGLELED = 0,
    DUALLED   = 1
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashSingleLEDWBPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashSingleLEDWBPtV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ledType
    ///
    /// Description:   LED type - single, dual
    /// Default Value: SINGLELED
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFlashLEDType  ledType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ledWBPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType ledWBPt;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashAdjV1KTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashAdjV1KTriggerDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashAdjV1CCTTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashAdjV1CCTTriggerDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType               triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    ///
    /// Description:   3rd trigger level, trigger control type: sensitivity value
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                         triggerDataCount;
    UINT32                         triggerDataID;
    modFlashAdjV1KTriggerDataType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashAdjV1LuxTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashAdjV1LuxTriggerDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType                 triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    ///
    /// Description:   2nd trigger level, trigger control type: CCT
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                           triggerDataCount;
    UINT32                           triggerDataID;
    modFlashAdjV1CCTTriggerDataType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashAdjV1DecisionPtType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashAdjV1DecisionPtType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType                 triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    ///
    /// Description:   1st trigger level, trigger control type: Lux index
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                           triggerDataCount;
    UINT32                           triggerDataID;
    modFlashAdjV1LuxTriggerDataType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashGainAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashGainAdjV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType                 triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    ///
    /// Description:   1st trigger level, trigger control type: Lux index
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                           triggerDataCount;
    UINT32                           triggerDataID;
    modFlashAdjV1LuxTriggerDataType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashSecondLevelType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashSecondLevelType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbFloatDataType triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashFirstLevelType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashFirstLevelType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    modFlashSecondLevelType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashInterpRatioLEDV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashInterpRatioLEDV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    awbglobalelements::awbTriggerDataFloatType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFlashInterRatioPreflashV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFlashInterRatioPreflashV1Type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType        triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                  triggerDataCount;
    UINT32                  triggerDataID;
    modFlashFirstLevelType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixFlashDecV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixFlashDecV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType                     moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;
    awbglobalelements::enableFlagType                   enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mainFlashPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFlashSingleLEDWBPtV1Type      mainFlashPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// interpRatioLEDPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFlashInterpRatioLEDV1Type     interpRatioLEDPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// interpRatioPreflash
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFlashInterRatioPreflashV1Type interpRatioPreflash;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FlashGainAdjust
    ///
    /// Tuning Level:  often_tune
    /// Description:   Gain adjust ratio
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFlashGainAdjV1Type            FlashGainAdjust;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixFlashDecV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixFlashDecV1TypeClass : public ParameterModule, public chromatixFlashDecV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixFlashDecV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixFlashDecV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixFlashDecV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashSingleLEDWBPtV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashSingleLEDWBPtV1Type(
        ParameterFileSymbolTableEntry* entry,
        modFlashSingleLEDWBPtV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashAdjV1KTriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashAdjV1KTriggerDataType(
        ParameterFileSymbolTableEntry* entry,
        modFlashAdjV1KTriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashAdjV1CCTTriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashAdjV1CCTTriggerDataType(
        ParameterFileSymbolTableEntry* entry,
        modFlashAdjV1CCTTriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashAdjV1LuxTriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashAdjV1LuxTriggerDataType(
        ParameterFileSymbolTableEntry* entry,
        modFlashAdjV1LuxTriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashAdjV1DecisionPtType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashAdjV1DecisionPtType(
        ParameterFileSymbolTableEntry* entry,
        modFlashAdjV1DecisionPtType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashGainAdjV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashGainAdjV1Type(
        ParameterFileSymbolTableEntry* entry,
        modFlashGainAdjV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashSecondLevelType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashSecondLevelType(
        ParameterFileSymbolTableEntry* entry,
        modFlashSecondLevelType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashFirstLevelType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashFirstLevelType(
        ParameterFileSymbolTableEntry* entry,
        modFlashFirstLevelType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashInterpRatioLEDV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashInterpRatioLEDV1Type(
        ParameterFileSymbolTableEntry* entry,
        modFlashInterpRatioLEDV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFlashInterRatioPreflashV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFlashInterRatioPreflashV1Type(
        ParameterFileSymbolTableEntry* entry,
        modFlashInterRatioPreflashV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixFlashDecV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixFlashDecV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixFlashDecV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixFlashDecV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashAdjV1CCTTriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashAdjV1CCTTriggerDataType(
        modFlashAdjV1CCTTriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashAdjV1LuxTriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashAdjV1LuxTriggerDataType(
        modFlashAdjV1LuxTriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashAdjV1DecisionPtType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashAdjV1DecisionPtType(
        modFlashAdjV1DecisionPtType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashGainAdjV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashGainAdjV1Type(
        modFlashGainAdjV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashFirstLevelType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashFirstLevelType(
        modFlashFirstLevelType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashInterpRatioLEDV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashInterpRatioLEDV1Type(
        modFlashInterpRatioLEDV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFlashInterRatioPreflashV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFlashInterRatioPreflashV1Type(
        modFlashInterRatioPreflashV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixFlashDecV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixFlashDecV1Type(
        chromatixFlashDecV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixFlashDecV1TypeClass

MODFLASHDECV1_NAMESPACE_END
#endif // MODFLASHDECV1_H

